package pers.xiaojun.boot.module.system.service.tenant;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import pers.xiaojun.boot.module.system.controller.tenant.vo.packages.TenantPackageQueryReqVO;
import pers.xiaojun.boot.module.system.controller.tenant.vo.packages.TenantPackageSaveReqVO;
import pers.xiaojun.boot.module.system.dao.entity.tenant.TenantPackageDO;


import java.util.Collection;

/**
 * 租户套餐服务接口
 *
 * @author xiaojun
 * @since 2025-11-22
 */
public interface TenantPackageService extends IService<TenantPackageDO> {


    /**
     * 保存租户套餐
     *
     * @param saveVO 保存租户套餐的信息
     * @return 租户套餐信息
     */
    TenantPackageDO saveTenantPackage(TenantPackageSaveReqVO saveVO);

    /**
     * 更新租户套餐
     *
     * @param updateVO 更新租户套餐的信息
     * @return 租户套餐信息
     */
    TenantPackageDO updateTenantPackage(TenantPackageSaveReqVO updateVO);

    /**
     * 根据Id删除租户套餐
     *
     * @param tenantPackageId 租户套餐Id
     */
    void removeTenantPackageById(Long tenantPackageId);

    /**
     * 根据Id批量删除租户套餐
     *
     * @param tenantPackageIds 租户套餐Id列表
     */
    void removeTenantPackageByIds(Collection<Long> tenantPackageIds);

    /**
     * 根据租户套餐Id获取租户信息
     *
     * @param tenantPackageId 租户套餐Id
     * @return 租户信息
     */
    TenantPackageDO getTenantPackageById(Long tenantPackageId);

    /**
     * 分页/条件查询租户套餐
     *
     * @param queryVO 查询条件
     * @return 分页数据
     */
    Page<TenantPackageDO> listTenantPackagesPage(TenantPackageQueryReqVO queryVO);

    /**
     * 校验租户套餐是否存在
     *
     * @param tenantPackageId 租户套餐Id
     * @return 租户套餐信息
     */
    TenantPackageDO validateTenantPackageExists(Long tenantPackageId);

    /**
     * 校验租户套餐是否可用
     * <p>
     * 包括括 是否存在、是否启用
     *
     * @param tenantPackageId 租户套餐Id
     * @return 租户套餐信息
     */
    TenantPackageDO validateTenantPackageAvailable(Long tenantPackageId);

}
